Redundancy lists in a peer-to-peer relay network

ABSTRACT

Methods and apparatus for implementing peer-to-peer relay. In one implementation, a method of building a redundancy list in a peer system in a peer-to-peer relay network includes: receiving a first message including first identification information at a first peer system from a second peer system connected to said first peer system in a peer-to-peer relay network; storing said first identification information; receiving a second message including second identification information at said first peer system from a third peer system connected to said first peer system in said peer-to-peer relay network; comparing said second identification information with said first identification information; building a redundancy update message; and sending said redundancy update message to said third peer system.

This application claims the benefit of U.S. Provisional Application No.60/513,098 (“PEER-TO-PEER RELAY NETWORK”), filed Oct. 20, 2003, thedisclosure of which is incorporated herein by reference.

BACKGROUND

In a typical client-server network, each of the clients in the networkestablishes a connection to a central server. A client requests servicesand data from the server. To communicate with another client, a clientsends a request to the server. Typically, the clients do not establishdirect connections to one another. In a client-server network with Nclients, each client has 1 connection to the server, and the server hasN respective connections to each of the clients. For example, as shownin FIG. 31A, in a client-server network with 6 clients, each client has1 connection to the server, and the server has 6 respective connectionsto the clients.

In a typical peer-to-peer network (or “P2P network”), each member (orpeer) in the peer-to-peer network establishes a connection to each ofthe other members. Using these direct peer-to-peer connections, themembers send data to and request data from the other members directly,rather than using a centralized server (e.g., compared to a typicalclient-server network where members interact through the server).Typically, each member in the network has similar responsibilities inthe network and the members are considered generally equivalent (asnetwork members). In a peer-to-peer network with N peers, each peer hasN−1 connections to other peers. For example, as shown in FIG. 31B, in apeer-to-peer network with 6 peers, each peer has 5 connections to otherpeers In some peer-to-peer networks, a server is also used by themembers for some centralized services, such as address discovery (e.g.,for establishing the connections for building the peer-to-peer network).

SUMMARY

The present invention provides methods and apparatus for implementingpeer-to-peer relay. In one implementation, a method of building aredundancy list in a peer system in a peer-to-peer relay networkincludes: receiving a first message including first identificationinformation at a first peer system from a second peer system connectedto said first peer system in a peer-to-peer relay network; storing saidfirst identification information; receiving a second message includingsecond identification information at said first peer system from a thirdpeer system connected to said first peer system in said peer-to-peerrelay network; comparing said second identification information withsaid first identification information; building a redundancy updatemessage; and sending said redundancy update message to said third peersystem.

In one implementation, a method of building a redundancy list in a peersystem in a peer-to-peer relay network includes: sending a messageincluding identification information from a first peer system to asecond peer system connected to said first peer system in a peer-to-peerrelay network; receiving a redundancy update message from said secondpeer system; and updating a redundancy list including one or moreentries; wherein each entry in said redundancy list stores a recipientidentifier indicating a peer system and a message identifier, such thatan entry indicates said first peer system is not to send a message tothe peer system indicated by the entry when the message includesidentification information matching the message identifier indicated bythe entry.

In one implementation, a peer system in a peer-to-peer relay networkincludes: means for receiving a first message including firstidentification information from a first sending peer system connected tosaid peer system in a peer-to-peer relay network; means for storing saidfirst identification information; means for receiving a second messageincluding second identification information from a second sending peersystem connected to said peer system in said peer-to-peer relay network;means for comparing said second identification information with saidfirst identification information; means for building a redundancy updatemessage; and means for sending said redundancy update message to saidsecond sending peer system.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 shows a representation of one implementation of a peer-to-peerrelay network.

FIG. 2 shows a block diagram of one implementation of a message.

FIG. 3 shows a flowchart of one implementation of a peer relaying amessage in a peer-to-peer relay network.

FIG. 4 shows a flowchart of one implementation of a peer relaying amessage in a peer-to-peer relay network according to a set of relayrules.

FIG. 5 shows a flowchart of one implementation of establishing apeer-to-peer relay network.

FIG. 6 shows a flowchart of one implementation of connecting a peer to apeer-to-peer relay network.

FIG. 7 shows a flowchart of one implementation of selecting peers forjoining a peer-to-peer relay network.

FIG. 8 shows a flowchart of one implementation of forcing a peer to givea connection to a new peer in a peer-to-peer relay network.

FIG. 9 shows a flowchart of one implementation of disconnection in apeer-to-peer relay network.

FIG. 10 shows a flowchart of one implementation of maintaining apeer-to-peer relay network.

FIGS. 11-18 illustrate an example of one implementation of building,adjusting, and maintaining a grid.

FIG. 19 shows a flowchart of one implementation of building a redundancylist in a peer-to-peer relay network.

FIG. 20 shows a flow chart of one implementation of updating redundancylists for a disconnecting peer in a peer-to-peer relay network.

FIG. 21 shows a flow chart of one implementation of relaying a messagefrom a peer system that belongs to multiple grids.

FIG. 22 shows a flow chart of one implementation of relaying a messagein a grid supporting spectators and participants.

FIG. 23 shows a flow chart of one implementation of detecting islands ina grid.

FIG. 24 shows a flow chart of one implementation of removing islands ina peer-to-peer relay network.

FIGS. 25 and 26 illustrate an example of detecting islands and joiningislands.

FIG. 27 shows a flow chart of one implementation of detecting a cheatingviolation in a peer-to-peer relay network.

FIG. 28 shows a flow chart of one implementation of detecting a securityviolation in a peer-to-peer relay network.

FIGS. 29 and 30 show block diagrams of one implementation of a serverand a peer system, respectively.

FIGS. 31A and 31B illustrate typical client-server and peer-to-peerarchitectures.

DETAILED DESCRIPTION

The present invention provides methods and apparatus for implementingpeer-to-peer relay. In one implementation, a plurality of computersystems is connected to form a peer-to-peer network. Each computersystem is connected to up to a predetermined number of other computersystems. To communicate, a computer system sends a message to each ofthe connected systems. When a computer system receives a message fromanother computer system, the receiving computer system sends or relaysthe message to other computer systems according to the relay proceduresor rules for that peer-to-peer relay network. Following the relay rules,the messages propagate throughout the network to all the member computersystems.

FIG. 1 shows a representation of one implementation of a peer-to-peerrelay network 100. A peer-to-peer relay network can also be referred toas a “grid.” In FIG. 1, a group of 10 peer systems 105 _(A . . . J)(also referred to as “peers”) are connected to form a peer-to-peer relaynetwork. Each peer system 105 is a network-enabled game console, such asa PlayStation 2™ game console with a network adapter, as offered by SonyComputer Entertainment Inc. The peer systems 105 are connected directly(e.g., wired or wireless connections) or indirectly (e.g., through anintranet or a public IP network such as the Internet). In oneimplementation, the peer systems 105 are connected using UDP or TCPconnections. The peer systems 105 exchange data to support a networkenvironment or activity, such as a chat environment or an online game.

Each peer 105 also has a connection to a central server 110, such as aUDP or TCP connection through the Internet (the connections to theserver 110 are not shown in FIG. 1). The server 110 is a server computersystem providing centralized services to the connected peer systems 105.In one implementation, the server provides an address directory of peersystems and tracks which peer systems are connected with which. Examplesof other server services include, but are not limited to:authentication, player matching, and tracking peer system addresses. Asdescribed below, in some implementations, the server can supportmultiple independent or related peer-to-peer relay networks. In oneimplementation, the server supports multiple environments or worlds,dividing or grouping clients into the environments and filtering dataappropriately. In one implementation, the server includes one or moreaspects of the servers described in co-pending and commonly assignedU.S. patent applications Ser. No. 10/______ (“Configuration Switching:Dynamically Changing Between Network Communication Architectures”),filed ______, and Ser. No. 10/______ (“Multi-User ApplicationProgramming Interface”), filed ______, the disclosures of which areincorporated herein by reference. In another implementation, the peersdo not use a centralized server (e.g., building the grid through directcommunication and relaying data).

The network 100 has a connection limit of 3. The connection limit is setby the server and defines the maximum number of connections each peer105 is permitted to have in the grid. In another implementation, onepeer (e.g., the peer establishing the grid) sets or multiple peersnegotiate the connection limit. In FIG. 1, the connection limit is 3 andeach peer 105 has 3 connections. Peer systems A-J each have 3connections to other peers (peer system 105 _(A) is also referred to aspeer system A or peer A). The network 100 is a 3-connection peer-to-peerrelay network so each peer 105 has 3 connections to other peers.

The peers 105 communicate by broadcasting messages throughout thenetwork 100. The peers 105 propagate the messages by relaying receivedmessages to connected peers 105 according to the relay rules of thenetwork 100. In this implementation, the relay rules define that a peer105 relays a message to each of the peers 105 connected to the peer 105,with two exceptions: (i) a peer 105 does not relay a message that thepeer 105 has already relayed, and (ii) a peer 105 does not relay amessage back to the peer 105 from which the relaying peer 105 receivedthe message. In one implementation, a peer 105 also does not relay amessage to a peer 105 from which the relaying peer 105 has alreadyreceived the message (e.g., when the relaying peer 105 receives themessage from multiple peers 105 before the relaying peer 105 has relayedthe message). In other implementations, different or additional rulescan be used. The relay rules (and other rules) are established by theserver or are pre-set in the peer systems (or their system software). Inanother implementation, the rules can be modified dynamically, such asby propagating messages with rule updates throughout the grid.

In one application of the network 100, the peers 105 are playing anetwork game. In the course of the game, a peer 105 generates an updatemessage reflecting actions or events caused by the peer 105. Forexample, during the execution of the game software on a player'scomputer system (e.g., peer A), the computer system generates updatedata to be used by other players' computer systems representing actionsin the game such as moving or shooting (e.g., updating the position of aplayer). For the update to be effective, each of the peers 105 needs toreceive the update from the updating peer 105. The peers 105 relay theupdate messages throughout the network 100 to propagate the message toeach peer 105.

In one example, peer A has an update to send to the other peers. Peer Abuilds an update message including the update data, an identifierindicating peer A is the source of the update, and a sequence identifierto differentiate this message from others sent out by peer A and providea relative sequence. Peer A sends the message to its connected peers: B,C, D. Peer B sends the message received from peer A to peers D and E.Peer B does not send the message to peer A because peer B received themessage from peer A. Similarly, peer C sends the message from peer A topeers G and H, and peer D sends the message from peer A to peers B andG. When peer B receives the message from peer D, peer B does not relaythe message again because peer B recognizes that this is the samemessage (using the identifiers of the message). Similarly, peer D doesnot relay the message received from peer B. Assuming that theconnections between peers are substantially the same in terms of theamount of time to transfer a message between peers, in the next set ofrelays, peer E relays the message from peer B to peers F and I, peer Grelays the message from peer C to peers D and F (or relays the messagefrom peer D to peers C and F, depending on which message arrived at peerC first), and peer H relays the message from peer C to peers I and J. Atthis time, every peer has received the update message from peer A.However, peers F, I, and J have just received the message, so thesepeers will relay the message. Peer F relays the message from peer E topeers G and J (or from peer G to peers E an J, whichever arrived first),peer I relays the message from peer E to peers H and J (or from peer Hto peers E and J, whichever arrived first), and peer J relays themessage from peer H to peers F and I. By this time, all of the peershave sent or relayed the message once. Because the peers will not relaythe same message again, the propagation of this message ends.

In this way, the message propagates throughout the peer-to-peer network100. This propagation of update information among the peer systems 105participating in the game supports the game and game environment. Thepeer systems 105 can distribute data throughout the network 100 withoutusing the centralized server 110 for distribution. In addition, eachpeer 105 is not directly connected to every other peer 105, savingresources. As a result, the grid 100 limits each peer's networkbandwidth requirement (since it only needs to communicate with a limitednumber of other clients) while allowing data from any single client toquickly spread to every other peer in the grid (e.g., using UDPsockets).

In other implementations, a peer-to-peer relay network includes more orless peer systems and the network has a different connection limit.Depending upon the number of peers, the connection limit, and the rulesfor establishing connections, not all peers may have all theirconnections filled and so there may be a peer (or more) with anavailable connection.

In another implementation, the connection limit can vary. In oneimplementation, the connection limit is specific to each peer system,with some, all, or none of the peers having different connection limits.Each peer sets its connection limit, or is assigned a connection limitby a server. In one example, peers X and Y each have a connection limitof 5, and peer Z has a connection limit of 4, and the remaining peerseach have a connection limit of 3. In another implementation, theconnection limit is dynamic. In this case, the server adjusts theconnection limit for the peers, such as based on network performance(e.g., when network traffic is low, the connection limit is low). Inanother implementation, one or more of the peer systems each adjusttheir respective connection limit dynamically. Alternatively, the serveradjusts the connection limit for specific peer systems dynamically(e.g., adjusting some but not all).

FIG. 2 shows a block diagram of one implementation of a message 205. Themessage 205 is built by a peer system to be sent to other peers in apeer-to-peer relay network. For example, referring to FIG. 1, when peerA has an update message to send to the other peers, peer A builds amessage such as the message 205. The message 205 includes: addressingdata 210, an origin identifier 215, a sequence value 220, and payloaddata 230. The addressing data 210 includes network addressinginformation to send the message 205 from the peer to another peer. Inone implementation, the addressing data 210 includes an IP address forthe sending peer and an IP address for the intended recipient peer. Theorigin identifier 215 identifies the peer that built the message 205.This identifier 215 indicates to peers throughout the peer-to-peer relaynetwork the origin of the message propagating through the network. Usingthe origin identifier 215, a peer receiving the message 205 candetermine from which peer in the network the message 205 originated. Thesequence value 220 identifies the specific message 205 and providesrelative sequence information. Using the sequence value 220, a peerreceiving the message 205 can determine whether a particular message hasalready been received and can determine the order or sequence ofmessages sent from the peer indicated by the origin identifier 215. Thedata 230 is the payload data for the message 205. For an update message(e.g., in a game), the payload data 230 is the update data to be used bythe recipient peers. In alternative implementations, different types ofmessages can be used, and messages with different formats from thatshown in FIG. 2 can be used (e.g., including different or additionalinformation). For example, a message can include a file or part of afile or frame of data such as a frame of game data or a frame or part ofan audio file being published to the members of the grid. The receivingpeers could reconstruct the whole file using the sequence value includedin each of the messages. In another example, a message includesadditional identification information, such as an identifier indicatingto which grid the message belongs for relaying by peers belonging tomultiple grids.

FIG. 3 shows a flowchart 300 of one implementation of a peer relaying amessage in a peer-to-peer relay network. Initially, the peer isconnected to one or more other peer systems in a peer-to-peer relaynetwork.

The peer receives a message from a sending peer through a connectionbetween the peer and the sending peer, block 305. The message includesan origin identifier, a sequence value, and payload data (e.g., updatedata), as in the message shown in FIG. 2.

The peer selects connections to which to relay the received message,block 310. The peer selects the connections from the availableconnections of the peer according to the relay rules for thepeer-to-peer relay network. After applying the relay rules, the peer mayhave selected some, none, or all of the peer's connections.

The peer relays the message to each of the selected connections, block315. The peer builds a message for each selected connection. For eachmessage to send, the peer uses the received message but updates theaddressing information as appropriate (e.g., changing the sender to thepeer and the recipient to the recipient peer for the connection).Accordingly, the payload data remains the same. In anotherimplementation, a peer can also add data to the message or change datain the message. The peer sends the built messages to the appropriaterecipients.

FIG. 4 shows a flowchart 400 of one implementation of a peer relaying amessage in a peer-to-peer relay network according to a set of relayrules. The relay rules used in FIG. 4 are an example of one set of relayrules. Other implementations can use different or additional relayrules. Initially, the relaying peer is connected to N other peer systemsin a peer-to-peer relay network. For example, in the network shown inFIG. 1, peer D is connected to 3 other peers (and so N=3 in this case).The relay rules for FIG. 4 for relaying a message are:

-   -   1. Do not relay the message twice    -   2. Do not relay the message back to the sender    -   3. Do not relay the message to the origin peer    -   4. Relay the message to the peers on the connections available        after applying rules 1 and 2

The relaying peer receives a message, block 405. The relaying peerdetermines whether the relaying peer has already received this message,block 410. The relaying peer compares identification data for themessage with data stored by the relaying peer for messages alreadyreceived. In one implementation, each peer maintains a received messagetable of origin identifiers and sequence values for messages that havebeen received. The relaying peer retrieves the origin identifier andsequence value from the received message and compares this informationwith data stored in the relaying peer's received message table. If therelaying peer determines that the relaying peer has previously receivedthis received message (e.g., the peer finds an entry in the receivedmessage table storing the origin identifier and sequence value of thereceived message), the relaying peer does not relay the receivedmessage. In another implementation, the relaying peer checks todetermine if the relaying peer has previously relayed the receivedmessage.

If the relaying peer determines that the relaying peer has notpreviously received this message, the relaying peer records that themessage has been received, block 412. In one implementation, therelaying peer adds an entry to the relaying peer's received messagetable for the origin identifier and sequence value of the receivedmessage. If the table already has an entry for this origin identifierand sequence value, the relaying peer does not change the table.

After recording that the message has been received, the relaying peersets a counter, block 415. The relaying peer uses the counter to stepthrough each of the relaying peer's available connections. In oneimplementation, the relaying peer sets an integer counter i to 1.

The relaying peer determines whether the relaying peer received themessage from the peer connected to the connection indicated by thecounter, block 420. The received message includes addressing informationindicating the sender of the received message. The counter indicates aconnection and so indicates a connected peer and that peer's addressinginformation. For example, peer D in FIG. 1 has 3 connections and peer Dhas assigned a number to each connection: peer A is connected toconnection 1, peer B is connected to connection 2, and peer G isconnected to connection 3. So, when the counter i is 1, peer D checks tosee if the received message was sent by peer A by comparing theaddressing information (the sender) for the received message with theaddressing information for peer A stored by peer D. If the receivedmessage was sent to the relaying peer by the peer connected to theconnection indicated by the counter the relaying peer does not relay themessage to that peer.

If the received message was not sent to the relaying peer by the peerconnected to the connection indicated by the counter, the relaying peerdetermines whether the peer connected to the connection indicated by thecounter is the origin peer system for the received message, block 422.The received message includes information indicating the peer that isthe origin of the received message (the peer that generated the data ofthe message originally, recall the origin identifier 215 of FIG. 2). Ifthe peer connected to the connection indicated by the counter is theorigin peer system for the received message the relaying peer does notrelay the message to that peer.

If the received message was not sent to the relaying peer by the peerconnected to the connection indicated by the counter and the peerconnected to the connection indicated by the counter is not the originpeer system for the received message, the relaying peer relays themessage to that connected peer, block 425. The relaying peer builds amessage for the indicated connection. The relaying peer makes a copy ofthe received message and updates the addressing information asappropriate (e.g., changing the sender to be the relaying peer and therecipient to be the connected peer connected to the indicatedconnection). Accordingly, the payload data remains the same. Therelaying peer sends the built messages to the connected peer through theindicated connection.

The relaying peer determines whether all the connections have beenchecked, block 430. The relaying peer compares the counter to the numberof connections established by the relaying peer in the peer-to-peerrelay network. For example, the relaying peer compares the counter i tothe value of N (the number of connections held by the relaying peer). Ifthe relaying peer has checked all the connections, the relaying peer hascompleted relaying for this received message.

If the relaying peer has not checked all the connections, the relayingpeer increments the counter, block 435. For example, the relaying peersets the counter i to be i+1. After incrementing the counter, therelaying peer determines whether the relaying peer received the receivedmessage from the peer connected to the connection indicated by theincremented counter, returning to block 420.

As noted above, in other implementations, different, additional, orfewer relay rules can also be used. In one implementation, the relayingpeer does relay the message back to the sender (e.g., so the sender canconfirm that the relaying peer did not change the data). In anotherimplementation, the relaying peer does not relay the message to the peerthat is indicated as the origin of the message (e.g., as indicated bythe origin identifier of the message). In another implementation, therelaying peer does not relay the same message to the same connected peeragain. In another implementation, the relaying peer selects a subset ofthe available connections to relay the message, such as selecting thepeers with the lowest and highest response times. In anotherimplementation, each peer relays the message to all the peer's connectedpeers subject to a hop count stored in the message so that the messagewill only be relayed a certain number of times. In anotherimplementation, a peer relays the same message a limited number of times(more than once).

FIG. 5 shows a flowchart 500 of one implementation of establishing apeer-to-peer relay network. Initially, a peer system and a server aredeployed, such as peer A and the server 110 in FIG. 1. The peer systemopens a connection to the server, block 505. The peer system isconnecting to the server to establish a peer-to-peer relay network (orgrid) and can be referred to as an “establishing peer.” The connectionto the server can be direct or an indirect network connection. In oneimplementation, the peer is assigned to or joins and registers in asubsection of the space or one of multiple worlds or environmentsmaintained by the server. The server authenticates the peer beforeallowing the peer to interact further. The peer system submits a creategrid request to the server, block 510. The create grid request indicatesthe peer's identification information and that the peer is requestingthe server to establish a new peer-to-peer relay network. In oneimplementation, the request also includes conditions that the peerrequests the server to apply (e.g., restrictions on joining the grid).In another implementation, the request indicates a connection limit anda set of rules for use in the grid (e.g., relay rules and connectionrules). The server registers the new grid, block 515. The servermaintains tables or lists of data tracking the established grids. Theserver creates a new table for the new grid and adds the requesting peerto the table. The server sends confirmation to the peer that the gridhas been established, block 520. The confirmation includes anyidentification or access information the peer needs to access the grid.In one implementation, the confirmation includes the connection limitand the rules for the grid (e.g., relay rules).

FIG. 6 shows a flowchart 600 of one implementation of connecting a peerto a peer-to-peer relay network. Initially, a peer-to-peer relay networkhas been established by a peer and server, such as peer A and the server110 in FIG. 1.

A peer system connects to the server, block 605. The peer system isconnecting to the server to join a peer-to-peer relay network (or grid)and can be referred to as a “new peer” or “joining peer.” The connectionto the server can be direct or an indirect network connection. In oneimplementation, the peer is assigned to or joins and registers in asubsection of the space or one of multiple worlds or environmentsmaintained by the server. The server authenticates the peer beforeallowing the peer to interact further.

The peer selects a grid from the available grids of the server, block610. In one implementation, the peer requests a list of available gridsand selects from that list. In another implementation, the serversupplies the list of available grids automatically when the peerconnects to the server. In one implementation, the server provides alist of available grids for the world in which the peer has registered.The server can also provide additional information to assist in theselection (e.g., which peers are already members of each grid). The peersubmits the grid selection to the server.

The server sends the addresses of the peers that have already joined theselected grid, block 615. The addresses indicate how to communicate withthe grid members (e.g., IP addresses). The addresses are forestablishing peer connections with the grid members, not connectionsthrough the server. If the selected grid has restricted access and thenew peer is not permitted to join the selected grid, the server does notprovide the addresses to the peer and offers to let the peer select adifferent grid. In one implementation, the server provides theconnection limit and rules for the selected grid with the addresses tothe new peer.

The new peer sends a join message to each of the grid members, block620. The join message indicates the address of the new peer and that thepeer is new to the grid. In another implementation, the new peer sends aconnection available message indicating the peer's address and thenumber of connections the peer has available (similar to when a peerloses a connection, as described below). In another implementation, thenew peer sends a join message to one grid member and that grid memberbegins to relay the join message through the grid.

The grid members receive the join message and each sends a join responseback to the new peer, block 625. Ajoin response indicates whether theresponding peer has any available connections or not. A positiveresponse indicates that the responding peer has an available connection.A negative response indicates that the responding peer does not have anavailable connection. The responding peers record the new peer's addressfrom the join message and use that address to send the join responses.The new peer receives the join responses.

The new peer selects which of the grid members to which to connect,block 630. The new peer uses a set of connection rules to select peersfor connection. For example, in one implementation, the new peer selectsfrom the peers sending positive responses a number of peers up to theconnection limit for the grid in the order the positive responses werereceived by the new peer (e.g., for a connection limit of 3, the newpeer selects the peers corresponding to the first three positiveresponses received). Different implementations can use different sets ofconnection rules. The new peer stores the response times for each of theselected peers. In another implementation, the new peer stores theresponse times for all the responses (positive and negative).

After selecting the peers for connection, the new peer opens connectionsto the selected peers, block 635. The new peer sends a connectionrequest to each of the selected peers and the selected peers confirm therequest, opening the connections (unless connections have becomeunavailable for the selected peers). The connections between peers canbe direct or indirect (e.g., across a network, such as the Internet). Inone implementation, when peers open a connection, each peer informs theserver of the connection.

In another implementation, the server facilitates joining the grid byforcing one or more connections. The server can cause one peer to closea connection and open a connection to another indicated peer. The servercan also cause a peer to close one or more of its connections.

FIG. 7 shows a flowchart 700 of one implementation of selecting peersfor joining a peer-to-peer relay network, such as in block 630 of FIG.6. Initially, a new peer has selected a grid and sent out join messagesto the member peers of that grid. The new peer has received joinresponses back from the member peers.

The new peer selects the peer corresponding to the first receivedpositive response, block 705. This positive response was received beforethe others and represents the fastest available connection. The new peerselects the peer corresponding to the last received positive response,block 710. This positive response was received after the others andrepresents the slowest available connection. To determine which responseis last, the new peer waits until all responses have been received orfor a defined period of time and then declares the last received in thatperiod to be the last. The new peer randomly selects peers from theremaining positive responses until the new peer has selected a number ofpeers equal to the connection limit, block 715. These selections supportan even distribution of fast and slow connections through the grid.

As noted above, in various implementations, different or additionalconnection rules can be used. In one implementation, the new peerselects the peers for the first and last positive responses and thenselects the peers corresponding to positive responses in increasingorder of response time (after the first). In another implementation, thenew peer selects peers as the responses arrive (e.g., reserving onespace for the last received positive response), rather than waiting tobegin selecting peers. In another implementation, the new peer selectspeers using a response time threshold (e.g., do not select peers with aresponse time above some limit). In another implementation, the new peerselects peers based on characteristics of the peers (using informationprovided in the join responses), such as storage capacity, processingspeed, access levels, or available functions.

In one implementation, a peer system classifies the connectionsaccording to the selection process used for selecting those connections.For example, a peer stores information indicating which of the openconnections corresponds to the join response received with the lowestresponse time and which of the open connections corresponds to the joinresponse received with the highest response time. As connections areadjusted for peers disconnecting and new peers joining the grid, thepeer can adjust the stored classifications of connections.

In another implementation, the new peer uses the server to assist inopening connections. In one implementation, the server provides a listof grid members with available connections and those member peers'addresses. The new peer sends the join messages directly to theindicated grid members.

If there are fewer positive responses than the connection limit, the newpeer will have remaining available connections. In one implementation,the new peer can force another peer to close an established connectionand open a connection with the new peer.

FIG. 8 shows a flowchart 800 of one implementation of forcing a peer togive a connection to a new peer in a peer-to-peer relay network.Initially, a new peer has selected a grid and sent out join messages tothe member peers of that grid. The new peer has received join responsesback from the member peers. However, after selecting the peers for allthe positive responses, the new peer still has available connections.

The new peer selects a peer corresponding to a negative response, block805. The new peer selects a negative response using the same connectionrules for positive responses (e.g., the first received negative responseaccording to the rules from FIG. 7). Alternatively, the new peer uses adifferent set of force connection rules. The new peer does not select apeer to which the new peer is already connected.

The new peer sends a force connection request to the selected peer,block 810. The force connection request indicates that the new peer hasat least one available connection (or specifically how many) and thatthe recipient peer is to open a connection with the new peer.

The new peer receives the force connection request and selects aconnection to close, block 815. The recipient peer selects a connectionto close using the connection rules in reverse. For connection rulesbased on response time, the recipient peer uses the stored responsetimes from join responses (and connection available responses, asdescribed below). In one implementation, to select among randomlyselected peers, the recipient peer selects the last peer selected, oragain randomly selects a peer. In another implementation, the recipientpeer uses a different set of forced disconnection rules.

The recipient peer closes the selected connection, block 820. Therecipient peer sends a close message to the peer connected to theselected connection and the two peers close the connection. The peerconnected to the selected connection now has an available connection andsends out a connection available message to the grid, as describedbelow.

The recipient peer sends a confirmation to the new peer, and the twopeers open a new connection, block 825. The new peer now has one lessavailable connection. If the new peer has more available connections,the new peer repeats the process, returning to block 805 to selectanother negative response.

In another implementation, the new peer does not force another peer toopen a connection unless the new peer has at least two availableconnections. Alternatively, a different threshold can be used (e.g.,three). In another implementation, the new peer sends a force connectionmessage when the new peer does not have at least some number ofconnections (a connection floor).

In another implementation, the recipient peer for a force connectionmessage has the option to decline (e.g., depending on network loadbalancing). If declined, the new peer selects another peer to which tosend a new force connection message.

In another implementation, if a new peer has two or more availableconnections and is sending a force connection message, the new peerincludes information in the message indicating that the new peer has twoavailable connections. When the recipient peer has selected a connectionto close, the recipient peer indicates to the connected peer for theselected connection (the remote peer) that the new peer has anotheravailable connection (and includes the address of the new peer ifappropriate). After the recipient peer has closed the connection withthe remote peer, the remote peer sends a connection available messagedirectly to the new peer (unless the new peer is already connected tothe remote peer). The new peer opens a new connection with the recipientpeer (selected by the new peer) and another new connection with theremote peer (selected by the recipient peer). In this way, the new peercan quickly establish two connections. If the new peer still has anothertwo available connections, the new peer can again send a forceconnection message indicating two available connections to anotherselected recipient peer.

When a peer system disconnects from another peer system, each of thepeers then has an available connection. If one (or both) of these peersis still in the grid (i.e., has not disconnected from the grid), thepeer sends out a connection available message to the peer's remainingconnected peers to be relayed through the grid to all the other peers inthe grid.

FIG. 9 shows a flowchart 900 of one implementation of disconnection in apeer-to-peer relay network. Initially, a peer system (the disconnectedpeer) is connected to at least two other peer systems in a peer-to-peerrelay network.

The disconnected peer becomes disconnected from one of the peers towhich the disconnected peer was initially connected, block 905. Thedisconnection can occur because of a voluntary disconnection on eitherend or a failure in the connection itself (e.g., part of the pathbetween the peers fails). For example, a voluntary disconnection canoccur when the peer determines that a connected peer is non-responsive(as described below) or when the peer is forced to open a connectionwith a new peer (as described above). In one implementation, the servercan cause a peer to close one or more connections resulting incorresponding disconnections.

The disconnected peer sends a connection available message to the peersremaining connected to the disconnected peer, block 910. The connectionavailable message indicates that the disconnected peer now has anavailable connection. In another implementation, the connectionavailable message indicates the number of connections the peer hasavailable.

The peers connected to the disconnected peer relay the connectionavailable message, block 915. The peers in the grid send connectionavailable responses back to the disconnected member, block 920. Aconnection available response indicates whether the responding peer hasany available connections or not. A positive response indicates that theresponding peer has an available connection. A negative responseindicates that the responding peer does not have an availableconnection. The responding peers record the new peer's address from thejoin message and use that address to send the join responses.Alternatively, the responding peers send the responses back through thegrid to be relayed to the disconnected peer. The disconnected peerreceives the connection available responses.

The disconnected peer selects one of the grid members to which toconnect, block 925. The disconnected peer uses the connection rules toselect a peer for connection, but the disconnected peer does not selecta peer to which the disconnected peer is already connected. For example,in one implementation, the disconnected peer uses the response times ofthe connection available responses and the stored response times of thepeers still connected to the disconnected peers to select a peer toreplace the lost connection. Different implementations can use differentsets of connection rules. The disconnected peer stores the response timefor the selected peer. In another implementation, the disconnected peerstores the response times for all the responses (positive and negative).In one implementation, the disconnected peer does not select a peer fromwhich the disconnected peer has disconnected within a certain timeperiod.

After selecting a peer for connection, the disconnected peer opens aconnection to the selected peer, block 930. The disconnected peer sendsa connection request to the selected peer and the selected peer confirmsthe request, opening the connection (unless the connection has becomeunavailable for the selected peer). The connections between peers can bedirect or indirect (e.g., across a network, such as the Internet). Inone implementation, the connected peers send an update to the serverconfirming the connection.

Similar to the implementation described above for joining a gridreferring to FIG. 8, in one implementation, if the disconnected peerstill has an available connection after attempting to open a connectionusing a connection available message (e.g., because all the connectionavailable responses were negative), the disconnected peer can send out aforce connection message, as described above.

In another implementation, the disconnected peer uses the server toassist in opening a new connection. In one implementation, the serverprovides a list of grid members with available connections and thosemember peers' addresses. The disconnected peer sends the connectionavailable messages directly to the indicated grid members.

The peer systems in the grid maintain the grid by periodically pollingone another. In one implementation, connected peers send each othermessages periodically to confirm the connection and the connected peeris still functioning.

FIG. 10 shows a flowchart 1000 of one implementation of maintaining apeer-to-peer relay network. Initially, multiple peer systems areconnected in a grid.

A peer sends a maintenance message to each of the peers connected tothat peer, block 1005. The maintenance message is a request for therecipient to provide a confirmation that the maintenance message wasreceived. In one implementation, the peer sends a ping message (orpings) each connected peer. The peer evaluates the responses received tothe maintenance messages, block 1010. The peer determines whether theresponses are satisfactory or not. In one implementation, if a responseis not received from a connected peer, the peer determines that theconnection for the peer has failed (either because of the connection orbecause of the connected peer). If a response is not received before atime limit has expired, the peer determines that the connection for thepeer has failed. The peer closes the connections for any connections thepeer has determined have failed, block 1015. The peer sends a closeconnection request to the connected peer on a failed connection. Whenthe peer receives confirmation, the peer closes the connection. If thepeer cannot communicate with the connected peer on a failed connectionor does not receive confirmation within a time limit, the peer closesthe connection without confirmation. In another implementation, a peerwaits to close a connection until the connection has been noted asfailed for a period of time or number of failures. In oneimplementation, the peer sends an update to the server confirming anyclosed connections.

If the peer has closed any connections, the peer has voluntarilydisconnected from one or more peers and sends out appropriate connectionavailable messages (e.g., as described above referring to FIG. 9).

In another implementation, the peers use the server to evaluate failedconnections. For example, when a peer determines that a connection hasfailed, the peer sends a request to the server for assistance. Theserver sends a message to the peer at the other end of the failedconnection to confirm whether the peer has failed or the connectionfailed. The server then informs the peers to facilitate opening newconnections or adjusting the network as appropriate.

FIGS. 11-18 illustrate an example of one implementation of building,adjusting, and maintaining a grid.

In FIG. 11, a peer system 1105 _(A) (peer A) has established apeer-to-peer relay network (grid) 1100 using a server 1110 (theconnection between peer A and the server 1110 is not shown). Theconnection limit for this grid is 3, so peer A has three availableconnections. In FIG. 12, a second peer system 1105 _(B) (peer B) hasjoined the grid 1100. When peer B joins, peer B sends a join message topeer A and peer A sends a positive join response to peer B. Peer A andpeer B open a connection.

In FIG. 13, two more peer systems 1105 _(C) and 1105 _(D) (peer C andpeer D) have already joined the grid 1100. Each of the four grid memberspeers A-D has established three connections with the other peers in thegrid 1100. A new peer system 1105 _(E) (peer is E) joins the grid.However, when peer E sends ajoin message to the other peers, all thejoin responses are negative because each of peers A-D already have themaximum number of connections permitted by the connection limit for thegrid 1100. In FIG. 14, peer E has forced a connection to be opened. PeerE selects peer B from among the negative responses (e.g., because peer Ereceived peer B's response first) and sends a force connection messageto peer B. Peer B selects peer D to close a connection and closes theconnection with peer D. Peer B confirms the connection with peer E andpeers B and E open a new connection. When peer B closes the connectionwith peer D, peer D has an available connection. Peer D sends aconnection available message to peers A and C and the peers relay themessage throughout the grid 1100. Peers A, B, and C do not haveavailable connections and so send negative responses to peer D. Peer Ehas two available connections and sends a positive response to peer D.Peer D opens a connection with peer E. Peer E still has an availableconnection and so sends out a connection available message. However, allthe responses are negative. Peer E has two established connections andonly has one available connection, so peer E does not force anotherconnection to be opened.

In FIG. 15, peer A disconnects from the grid 1100. Peer A was connectedto each of peers B, C, and D. When peer A disconnects, peers B, C, and Deach have an available connection. Peers B, C, and D send out connectionavailable messages and peers B, C, D, and E each send positiveresponses. After evaluating the responses to the connection availableresponses and eliminating peers for already existing connections, thepeers B-E establish connections as shown in FIG. 16. Each of peers B-Enow has three connections.

In FIG. 17, three new peer systems 1105 _(F), 1105 _(G), and 1105 _(H)(peers F, G, and H) have joined the grid 1100 and establishedconnections. As part of the regular activity to maintain the grid, thepeers B-H each send ping messages to their connected peers. For example,peer B pings peers D, E, and G on a regular basis. Peer D does notprovide a satisfactory response to peer B for peer B's ping message(e.g., the response from peer D is too slow or does not arrive at peerB). In FIG. 18, peer B has closed the connection peer D. When peer Bcloses the connection, peer B and peer D have available connections.Peers B and D send out connection available messages to be relayedthrough the grid 1100. Peer B receives positive responses from peers Gand D. Peer B is already connected to peer G so will not select peer Gfor a new connection. Peer B just disconnected from peer D for a failedconnection and so will not select peer D for a new connection. Peer Bdoes not open a new connection (peer B has two open connections and onlyavailable connection, so peer B does not attempt to force a connection,though in another implementation peer B may). Peer D receives positiveresponses from peers B and G. Peer B just disconnected from peer D for afailed connection so peer D will not select peer B for a new connection(or peer B would refuse a new connection request). Peer D selects peer Gand opens a connection to peer G.

In the examples illustrated in FIGS. 11-18, the peers of the grid 1100open and close connections to build and adjust the grid without relyingon the server 1110 to manage the connections (though the server 1110does assist in providing a new peer with the addresses of the currentmember peers of a grid).

Redundancy Lists

In one implementation, the peers in a grid reduce redundant messagetraffic by avoiding sending messages determined to be redundant based oncurrent paths in the grid.

In this implementation, each peer in the peer-to-peer relay networkstores a redundancy list. The redundancy list of a peer indicates otherpeers to which the peer will not send messages that originated from adesignated peer. Accordingly, each entry in the redundancy listindicates an origin peer and a destination peer (connected to therelaying peer). When a peer receives a message that indicates anoriginating peer that is in the peer's redundancy list, the peer willnot relay that message to the connected peer indicated by thecorresponding entry in the redundancy list. In another implementation,the peers can turn on and turn off the redundancy list functionality(e.g., at the request of a server, such as after determining a securityproblem has arisen).

FIG. 19 shows a flowchart 1900 of one implementation of building aredundancy list in a peer-to-peer relay network. Initially, multiplepeer systems are connected to form a peer-to-peer relay network. Arecipient peer is connected to at least two other peers.

The recipient peer receives a redundant message from connected peer,block 1905. The redundant message is redundant because the recipientpeer has already received the same message. The recipient peeridentifies the redundant message as being the same using information inthe received message. As described above, in some implementations, eachpeer maintains a list of messages received to avoid relaying the samemessage twice. The recipient peer can also use this list to recognize aredundant message.

The recipient peer builds a redundancy update message, block 1910. Therecipient peer includes in the redundancy update message the informationidentifying the origin of the message and information identifying therecipient peer. For example, the recipient peer retrieves the originidentifier from the redundant message (e.g., recall the message shown inFIG. 2) and stores the origin identifier in the redundancy updatemessage.

The recipient peer sends the redundancy update message to the sender ofthe redundant message, block 1915. The redundant message includes in itsaddress information address information for the sender of the redundantmessage.

The sender of the redundant message receives the redundancy updatemessage and updates the redundancy list for the sender, block 1920. Thesender retrieves the information from the redundancy update messageidentifying the origin of the redundant message and the recipient of theredundant message (the recipient peer). The sender adds an entry to thesender's redundancy list indicating that the sender should not send amessage originating from the indicated origin to the recipient peer.

For example, referring to the grid 100 shown in FIG. 1, peer B receivesmessages originating from peer C from each of peers A, D, and E.Assuming peer B receives the message originating from peer C from peer Afirst, the messages originating from peer C received from peers D and Eare redundant messages. Peer B builds redundancy update messages to sendto peers D and E indicating peer C as the origin and peer B as therecipient. Peer B sends the redundancy update message to peer D. Peer Dupdates its redundancy list to indicate that peer D is not to relaymessages originating from peer C to peer B. Peer E receives a similarredundancy update message from peer B and also updates its redundancylist in a similar way.

As peers connect and disconnect to and from the grid, the paths betweenclients change and so redundancy lists can become inaccurate.Accordingly, when a peer disconnects from the grid, the remaining peersupdate redundancy lists.

FIG. 20 shows a flow chart 2000 of one implementation of updatingredundancy lists for a disconnecting peer in a peer-to-peer relaynetwork. Initially, multiple peers systems are connected to form apeer-to-peer relay network. A disconnecting peer is connected to atleast two other peers.

The disconnecting peer disconnects from the grid, block 2005. The peerspreviously connected to the disconnecting peers are now disconnectedpeers. Each of the disconnected peers follows the same process below.

The disconnected peer builds a clear redundancy message, block 2010. Theclear redundancy message indicates information identifying thedisconnected peer. The disconnected peer sends the clear redundancymessage to the peers still connected to the disconnected peer, block2015. A peer that receives the clear redundancy message from thedisconnected peer updates its redundancy list, block 2020. The peerreceiving the clear redundancy message removes entries in the peer'sredundancy list affecting relaying messages to the disconnected peerindicated by the clear redundancy message.

Returning to the example described above referring to FIGS. 1 and 19,peer D has an entry in its redundancy list indicating that peer D shouldnot relay messages originating from peer C to peer B. If peer Adisconnects from the grid, peer B recognizes the disconnection of peer Aand builds a clear redundancy message. Peer B sends a clear redundancymessage to peers D and E. Peer D receives the clear redundancy messagefrom peer B and clears the entry in peer D's redundancy list indicatingthat peer D should not relay messages originating from peer C to peer B.Accordingly, the next time that peer D receives a message originatingfrom peer C, peer D will once again relay message to peer B. Peer Eupdates its redundancy list similarly.

Multiple Grids

In one implementation, a peer system can belong to multiple peer-to-peerrelay networks. Each grid can be related or independent. The connectionsestablished according to each grid can be independent. Accordingly, apeer can be connected to one peer in one grid but not in another (eventhough the two peers are both in both grids). In one implementation, iftwo peers are connected in two grids, the peers use a single connection.A message includes information indicating to which grid the messagebelongs. A peer relays a received message according to the connectionsestablished corresponding to the indicated grid for the message.

In one implementation, the members of a peer-to-peer relay network cancreate sub-networks within the peer-to-peer relay network. In this case,each of the members of a sub-network is also a member of the largergrid. For example, a peer-to-peer relay network includes all the playersin a game as peer systems and each team (including sub-sets of the totalplayers) has a sub-network of peer systems (e.g., for privatecommunication in the game). In this way, the peers can establish amulti-channel environment for desirably distributing and receiving data.

In another implementation, the peer-to-peer relay networks areindependent but share one or more member peer systems. For example, agroup of peers can establish a grid to support a lobby or chatenvironment and another group of peers including at least one peer ofthe first group can establish a grid to support a particular game. Inanother example, a group of peers form a grid for a clan (organization)and some of those peers join or create other grids to play games.

For example, in an online environment, all the peers in the environmentare connected to a single main grid. The main grid is for generalannouncements and general services. Peers create, join, and leaveadditional smaller grids to access online services such as chat rooms orgames. Peers can use the main grid to communicate before a smaller gridhas been established, such as when a new peer wants to join a grid(rather than using a server). Because all the control messages can bebroadcast through the main grid, every peer can independently maintain alist of available grids and a list of active peers in each grid. In oneimplementation, the peers do not use a centralized server.

FIG. 21 shows a flow chart 2100 of one implementation of relaying amessage from a peer system that belongs to multiple grids. Initially,multiple peers systems are connected to form two peer-to-peer relaynetworks. A relaying peer is a member of both grids, and has respectiveconnections and relay rules for each grid.

The relaying peer receives a message, block 2105. The message includes agrid identifier indicating to which grid the message belongs.

The relaying peer selects the grid indicated by the received message,block 2110. Each grid has a respective set of connections and arespective set of relay rules. By selecting a grid, the relaying peerselects a set of connections to use and a set of relay rules to use forrelaying the received message.

The relaying peer selects connections according to the selected grid andthe corresponding relay rules, block 2115. Using the relay rules for theselected grid, the relaying peer select any appropriate connections forrelaying the received message.

The relaying peer sends the received message to the selected peers,block 2120. Before relaying the message, the relaying peer adjusts thereceived message for each selected peer, such as by updating the addressinformation for the received message to indicate the received message isbeing relayed from the relaying peer to the selected peer.

Spectators

In one implementation, the peers in a grid are classified asparticipants or spectators. A participant peer generates new messages tobe relayed throughout the grid. A spectator peer does not generate newmessages and acts as a pass-through node in the grid. Both participantsand spectators relay messages to their connected peers according to therelay rules of the grid. In some applications, there may be manyspectators for each participant. In one implementation having multipleparticipants, each participant has a connection to at least one otherparticipant.

In one example, a group of participants play an online game whilespectators watch (observing data without changing the game data). Thenumber of spectators can be very large (e.g., thousands). Other examplesinclude performances (e.g., music), speeches, and teaching. In someapplications, because the peers handle distribution by relaying data,the load on a server for distribution does not always increase as thenumber of spectators increases.

In one implementation, when a peer joins a grid, the peer joins the gridas a participant or as a spectator. If the peer joins the grid asspectator, the peer is not authorized to create new messages and sendthe new messages into the grid to be relayed throughout the grid. If aspectator generates a new message and sends the new message to the peersconnected to the spectator, the peers receiving the new message from thespectator will not forward or relay the received message. In oneimplementation, some or all of the spectators could form another relatedgrid as participants (e.g., to discuss a game being watched in the firstgrid).

FIG. 22 shows a flow chart 2200 of one implementation of relaying amessage in a grid supporting spectators and participants. Initially,multiple peers systems are connected to form a peer-to-peer relaynetwork supporting participants and spectators. Each of the peerssystems stores a list of the peers that are participants. In oneimplementation, the participant peers periodically broadcast messagesindicating which peers are participants. In another implementation, theserver facilitates identifying the participants.

A relaying peer receives a message, block 2205. The message includes anorigin identifier indicating the peer that created the message.

The relaying peer confirms that the origin of the received message is aparticipant peer, block 2210. The relaying peer stores a list ofparticipant peers. The relaying peer compares the peer identified as theorigin of the received message with the list of participant peers. Ifthe origin peer for the received message is not a participant (i.e., isa spectator), the relaying peer does not relay the received message.

If the origin peer for the received message is a participant, therelaying peer selects connections according to the relay rules for thegrid, block 2215. Using the relay rules, the relaying peer selects anyappropriate connections for relaying the received message.

The relaying peer sends the received message to the selected peers,block 2220. Before relaying the message, the relaying peer adjusts thereceived message for each selected peer, such as by updating the addressinformation for the received message to indicate the received message isbeing relayed from the relaying peer to the selected peer.

In another implementation, the spectators are not in the same grid asthe participants. The spectators form a parallel spectator grid linkedto the participant grid. The spectators receive data from theparticipants and relay the data in the spectator grid. The link(s)between the grids can be provided by a server or gateway, or byconnections between selected peers from each grid.

In another implementation, a spectator can be a conditional spectator. Aconditional spectator can request permission to generate data to berelayed throughout the grid. If the spectator has received permission,the spectator can send a message that the peers in the grid will relay(e.g., the message includes an authorization flag). The permission canbe granted by a server, by a selected peer as a moderator, or by theparticipants (one or more). For example, in a teaching environment, theparticipant is the lecturer and the spectators can request permission toask questions that will be relayed to all the peers.

Island Recovery

In one implementation, the server and peers in a peer-to-peer relaynetwork support adjusting connections in the grid to avoid or recoverfrom the formation of islands. An isolated group of peers in a grid isreferred to as an island. Islands can form in a grid when multiple peersdisconnect substantially simultaneously. In the disconnection processdescribed above, the remaining peers send messages indicating availableconnections, however, with multiple concurrent disconnections, theremaining peers may form isolated groups in the grid. Peers in oneisland cannot send messages to peers in another island because there isno peer-to-peer connection between the islands. The server detects theformation of islands and interacts with peers to remove the islands.

FIG. 23 shows a flow chart 2300 of one implementation of detectingislands in a grid. Initially, multiple peer systems are connected toform a peer-to-peer relay network or grid. When the peers open and closeconnections, or become disconnected, peers inform the server for thegrid of the changing connections. In this way, the server tracks all ofthe connections in the grid. The server also maintains an ordered listof the peers in the grid.

The server sets an island counter, block 2305. The island counterrepresents the number of islands. In one implementation, the server setsa counter i to be 1.

The server selects a starting peer, block 2310. When the island counteris one, the server selects the first peer in the ordered list of peersas the starting peer. When the island counter is greater than one, theserver selects as the starting peer the most recently found unmarkedpeer (as described below).

The server marks each peer connected to the starting peer as belongingto the same island as the starting peer, block 2315. The server markspeers connected directly to the starting peer and connected indirectlyto the starting peers through other peers (e.g., progresses from thestarting peer to connected peers and peers connected to those connectedpeers and so on). The server marks a peer with the current value of theisland counter to indicate to which island the peer belongs.

After marking all of the peers connected to the starting peer, theserver determines if there is an unmarked peer remaining in the grid,block 2320. In one implementation, the server progresses through theordered list of peers searching for an unmarked peer.

If the server finds an unmarked peer, the server increments the islandcounter, block 2325. The server increments the island counter toindicate that an additional island has been detected. After incrementingthe island counter, the server returns to block 2310 and uses the foundunmarked peer as the starting peer.

If the server does not find an unmarked peer, the server determines thenumber of islands detected, block 2330. The server has incremented theisland counter for each detected island, and so the island counterrepresents the number of islands detected. If the island counter isequal to one, a single island has been found and so the grid is notdivided into multiple islands. If the island counter is greater thanone, multiple islands have been found and the grid is divided intoislands.

FIG. 24 shows a flow chart 2400 of one implementation of removingislands in a peer-to-peer relay network. Initially, multiple peerssystems are connected in a peer-to-peer relay network or grid. The gridhas become divided into two islands of peers, where the peers in oneisland do not have a connection path to the peers in the other island.The server has detected the two islands, such as by using the processshown in FIG. 23.

The server selects a peer from each island, block 2405. The server canselect the first island peer and the second island peer in various ways.In one implementation, the server selects a peer that has an availableconnection. In another implementation, the server selects a peer from anisland at random.

If the first island peer does not have available connections, the serversends a close connection message to the first island peer to close aconnection, block 2410. The first island peer receives the message fromthe server and selects a connection to close in the same way as a peerselects a connection to close when receiving a force connection message,as described above. The first island peer closes a connection and so hasan available connection.

The server sends an initiate force connection message to the firstisland peer, block 2415. The initiate force connection message includesthe address of the second island peer. The first island peer receivesthe message from the server and sends a force connection message to thesecond island peer.

The second island peer receives the force connection message from thefirst island peer, selects a connection to close, and closes theselected connection, block 2420. The second island peer selects theconnection to close in the same way as described above for the recipientof a force connection message. If the second island peer has anavailable connection before closing a connection, the second island peerdoes not close any of its connections.

The first island peer sends an open connection request to the secondisland peer, and the two peers open a connection, block 2425. Once theconnection is open, the islands have been joined, forming a singleisland. The peers send updates to the server confirming the connection.If additional islands remain, as detected as described above, the serverreturns to block 2405 to connect two more of the remaining islands.

FIGS. 25 and 26 illustrate an example of detecting islands and joiningislands. In FIG. 25, a grid 2500 similar to the grid 1100 in FIG. 11 hasbeen divided into two islands from the simultaneous disconnection ofpeers C, G, and F. The first island includes peers A, B, D, and E. Thesecond island includes peers H, I, and J. In FIG. 26, the server hascaused peer D to open a connection with peer I, joining the two islands.

Security

In one implementation, the peer-to-peer relay network supports thedetection of and recovery from cheating violations or securityviolations, or both. Cheating violations involve the manipulation ofdata to change an outcome in the processing of online activity, such asto affect the course of a game. Security violations involve unauthorizeddata or improper use of data to damage the grid or cause the grid tofail.

FIG. 27 shows a flow chart 2700 of one implementation of detecting acheating violation in a peer-to-peer relay network. Initially, multiplepeer systems are connected to form a peer-to-peer relay network or grid.

The peer receives a message from each of its connected peers, block2705. As described above, the peers in the grid relay messagesthroughout the grid. A peer will receive the same message (the samecontent data, though the address information may be different) througheach of its connections with other peers. For example, if a peer hasthree open connections, the peer receives the same message three timesfrom three respective peers. The peer identifies the messages as beingthe same message using information in the message indicating the originand a sequence value, such as the origin identifier 215 and sequencevalue 220 shown in the message 205 in FIG. 2. The same message fromdifferent peers will have the same origin and sequence information.

The peer compares the messages received from each of the connectedpeers, block 2710. The peer compares the data portion of the message,such as the data 230 shown in the message 205 in FIG. 2. The peerdetermines if the data portion of the message is different for any ofthe received messages. In one implementation, if the data portion for amessage received from one connected peer is different from the dataportion for the same message received from the other connected peers,the peer determines that a cheating violation has occurred. The peeralso determines that the one peer that sent the message with thedifferent data is responsible for the cheating violation. Alternatively,the peer uses a different technique to detect a cheating violation oridentify the peer responsible for the cheating violation. The peer doesnot relay the message having a different data portion, if appropriate.

If a cheating violation has occurred, the peer sends a cheating alert,block 2715. The cheating alert indicates a cheating violation hasoccurred and which peer is responsible for the cheating violation. Thepeer sends the cheating alert to the connected peers to relay the alertthroughout the grid. In another implementation, the peers send thecheating alert to the server for appropriate handling.

When the peers receive the cheating alert, the peers take action torecover against the violation, block 2720. The peers take action toprevent the cheating peer from continuing to influence the gridactivity. In one implementation, the peers ignore messages from thecheating peer. In another implementation, the peers force the cheatingpeer to disconnect from the grid. The peers also take action to repairthe effect of the message including the different data, such as bysending out a replacement message with correct data as shown by the datain the other messages used to identify the cheating message.Alternatively, one of the peers estimates the correct data and relaysthe correct data throughout the grid. In another implementation, thepeers respond to the cheating alert by informing the server. In thiscase, the server addresses the cheating violations such as bydisconnecting the peer responsible for the cheating violation.

In another implementation, when a peer sends a message, the recipientrelays the message back to the sending peer. The sending peer keeps acopy of the sent message. When the sending peer receives the messageback from the recipient, the sending peer compares the data of the sentmessage with the data of the received message. The peer detects acheating violation by finding a difference. The peer determines that therecipient modified the message and sends out a cheating alert. In oneimplementation, recovery or repair actions are not taken for a cheatingpeer until multiple violations have been reported (e.g., as tracked by aserver). In another implementation, this send-back check for cheating isa first layer for detecting cheating followed by more complicatedprocedures once a potential problem has been identified.

In another implementation, the peer detects a cheating violation bycomparing the data in a received message with a predicted set of datagenerated by the peer. If the peer determines that the data in thereceived message is different from that generated by the peer, the peerdetermines that the sender of the received message is responsible for acheating violation and issues an alert.

In an example of detecting a cheating violation in the grid 100 shown inFIG. 1, peer B receives the same message from each of peers A, D, and E.Peer B identifies the messages as being the same by comparing the originidentifiers and sequence values. If peer B detects that the message frompeer A has a different data portion, peer B issues a cheating alertidentifying peer A as cheating. Peer B sends the cheating alert to peersD and E (and optionally to peer A). The peers relay the cheating alertuntil all the peers have received the alert. In response to the alert,the peers will ignore all further messages from peer A. As a result,peers B, C, and D will not relay messages from peer A anymore.

FIG. 28 shows a flow chart 2800 of one implementation of detecting asecurity violation in a peer-to-peer relay network. Initially, multiplepeer systems are connected to form a peer-to-peer relay network or grid.

The peer receives a message from one of its connected peers, block 2805.The peer analyzes the message and detects a security violation, block2810. The peer determines that the message is a security violation byrecognizing that the message is invalid or includes invalid data. Inanother implementation, the peer determines that the message is asecurity violation by analyzing how the message was sent to the peer.For example, if the message was sent to the peer as one of a largenumber of repetitions of the same message (e.g. as in a denial ofservice attack), the peer recognizes that the message is a securityviolation. In one implementation, a message is sent as a series ofpackets and the peer detects a security violation at a lower level thana complete message, such as at the packet level. The peer alsodetermines that the sender of the message with the security violation isresponsible for the security violation. Alternatively, the peer uses adifferent technique to detect a security violation or identify the peerresponsible for the cheating violation. The peer does not relay amessage or data having a security violation.

If a security violation has occurred, the peer sends a security alert,block 2815. The security alert indicates a security violation hasoccurred and which peer is responsible for the security violation. Thepeer sends the security alert to the connected peers to relay the alertthroughout the grid. In another implementation, the peer sends thesecurity alert to the server for proper handling.

When the peers receive the security alert, the peers take appropriateaction to recover against the violation, block 2820. The peers takeaction to prevent the peer violating the security of the grid fromcontinuing to affect or damage the grid. In one implementation, thepeers ignore messages from the peer responsible for the securityviolation. In another implementation, the peers force the peerresponsible for the security violation to disconnect from the grid. Thepeers also take appropriate action to repair any damage caused by thesecurity violation. In another implementation, the peers respond to thesecurity alert by informing the server. In this case, the serveraddresses the security violation such as by disconnecting the peerresponsible for the violation and the action to repair any damage causedto the grid.

FIGS. 29 and 30 show block diagrams of one implementation of a server2905 and a peer system 3005, respectively. In other implementations, aserver or a peer include fewer components than shown in FIGS. 29 and 30,or include different or additional components.

The server 2905 operates as described above and includes components toprovide the functionality described above, including components forestablishing grids 2910, adding peers 2915, connecting peers 2920,disconnecting peers 2925, maintaining grids 2930, storing and generatinggrid data (e.g., connections, members, connection limits) and rules(e.g., relay rules, connection rules) 2935, managing multiple worlds2940, managing and assisting with redundancy lists 2940, managingmultiple grids 2950, managing spectators and participants in grids 2955,handling island detection and recovery 2960, managing and addressingcheating and security violations 2965, and central services of theserver 2970 (e.g., network communication and addressing, playermatching, chat facilities, data backup, etc.).

The peer system 3005 operates as described above and includes componentsto provide the functionality described above, including components forestablishing grids 3010, joining a grid 3015, connecting peers 3020,disconnecting peers 3025, maintaining grids 3030, storing and generatinggrid data (e.g., connections, members, connection limits) and rules(e.g., relay rules, connection rules) 3035, building, updating, andusing redundancy lists 3040, operating in multiple grids 3045, operatingwith and as spectators and participants in grids 3050, handling islanddetection and recovery 3055, managing, detecting, and addressingcheating and security violations 3060, and peer system services 3065(e.g., network communication and addressing, player matching, chatfacilities, data backup, etc.).

Various implementations of the peer-to-peer relay network providedesirable benefits. A grid can be very useful in a number of networkapplications, including online massive multi-player computer games.Online game applications are just one example of a larger group ofnetwork applications that have one thing in common: sharing andmaintaining one common data set. When the data set is updated on onepeer, the information is sent to a group of other peers and relayedthroughout the grid so each peer will have an updated data set. Therelay grid allows connected peers with limited network bandwidth toexchange data among themselves, without going through a central server(for data distribution). This network can be used to exchange game data,other game related information, media files, streaming audio, orstreaming video.

For example, in one implementation the peers use the grid for filepublishing. A peer in the grid publishes a file (as one message orbroken into multiple messages) by sending the file to the peersconnected to the publisher and the member peers of the grid relay thefile throughout the grid to all the members. In this way all the membersof the grid can receive the published file without using a server andwithout using a direct connection from the published to every peer. Invarious implementations, any type of file can be published. The filescan be data, media, or executable software applications. Examples offiles to be published through a grid include, but are not limited to:streaming media (e.g., audio and/or video), media files, replay datafrom a game or other application, maps, announcements, messages,application data and modules (e.g., a map, a template, a texture, asound).

The various implementations of the invention are realized in electronichardware, computer software, or combinations of these technologies. Mostimplementations include one or more computer programs executed by aprogrammable computer. For example, in one implementation, each peersystem and the server includes one or more computers executing softwareimplementing the peer-to-peer relay network functionality. In general,each computer includes one or more processors, one or more data-storagecomponents (e.g., volatile or non-volatile memory modules and persistentoptical and magnetic storage devices, such as hard and floppy diskdrives, CD-ROM drives, and magnetic tape drives), one or more inputdevices (e.g., mice and keyboards), and one or more output devices(e.g., display consoles and printers).

The computer programs include executable code that is usually stored ina persistent storage medium and then copied into memory at run-time. Theprocessor executes the code by retrieving program instructions frommemory in a prescribed order. When executing the program code, thecomputer receives data from the input and/or storage devices, performsoperations on the data, and then delivers the resulting data to theoutput and/or storage devices.

Various illustrative implementations of the present invention have beendescribed. However, one of ordinary skill in the art will see thatadditional implementations are also possible and within the scope of thepresent invention. For example, while the above description describesseveral implementations of peer-to-peer relay networks discussed in thecontext of supporting game applications, other applications are alsopossible, such as file sharing or other data dissemination applications.

Accordingly, the present invention is not limited to only thoseimplementations described above.

1. A method of building a redundancy list in a peer system in a peer-to-peer relay network, comprising: receiving a first message including first identification information at a first peer system from a second peer system connected to said first peer system in a peer-to-peer relay network; storing said first identification information; receiving a second message including second identification information at said first peer system from a third peer system connected to said first peer system in said peer-to-peer relay network; comparing said second identification information with said first identification information; building a redundancy update message; and sending said redundancy update message to said third peer system.
 2. The method of claim 1, wherein: wherein said second identification information is the same as said first identification information
 3. The method of claim 1, wherein: a message includes data to be relayed, an origin identifier, a sequence value, and addressing information, and the origin identifier of a message indicates an origin peer system.
 4. The method of claim 3, wherein: comparing said second identification information with said first identification information includes: comparing the origin identifier of said first message with the origin identifier of said second message, and comparing the sequence value of said first message with the sequence value of said second message.
 5. The method of claim 3, wherein: said redundancy update message includes an origin identifier and a recipient identifier, the origin identifier of said redundancy update message indicates the origin peer system that is the same as the origin peer system indicated by the origin identifier of said first message and of said second message, and the recipient identifier of said redundancy update message indicates said first peer system.
 6. The method of claim 1, further comprising: disconnecting said first peer system from a fourth peer system; building a clear redundancy message; and sending said clear redundancy message from said first peer system to each peer system connected to said first peer system in said peer-to-peer relay network.
 7. The method of claim 6, wherein: said clear redundancy message includes a recipient identifier indicating said first peer system.
 8. The method of claim 6, wherein: said fourth peer system is said second peer system or said third peer system.
 9. The method of claim 1, wherein: each peer system in said peer-to-peer relay network stores a connection limit defining a number of other peer systems up to which that peer system is permitted to connect, and each peer system stores a set of one or more relay rules for relaying data to other peer systems connected to that peer system.
 10. The method of claim 1, wherein: the data relayed by peer systems is update data for a network environment.
 11. The method of claim 1, wherein: the data relayed by peer systems is update data for an online game.
 12. The method of claim 1, wherein: at least one peer system is a network-enabled game console.
 13. The method of claim 1, wherein: at least two peer systems are connected through the Internet.
 14. A method of building a redundancy list in a peer system in a peer-to-peer relay network, comprising: sending a message including identification information from a first peer system to a second peer system connected to said first peer system in a peer-to-peer relay network; receiving a redundancy update message from said second peer system; and updating a redundancy list including one or more entries; wherein each entry in said redundancy list stores a recipient identifier indicating a peer system and a message identifier, such that an entry indicates said first peer system is not to send a message to the peer system indicated by the entry when the message includes identification information matching the message identifier indicated by the entry.
 15. The method of claim 14, wherein: a message includes data to be relayed, an origin identifier, a sequence value, and addressing information, and the origin identifier of a message indicates an origin peer system.
 16. The method of claim 15, wherein: the message identifier of an entry in said redundancy list indicates an origin peer system.
 17. The method of claim 14, wherein: said redundancy update message indicates identification information that is the same as the identification information of said message sent to said second peer system.
 18. The method of claim 14, further comprising: receiving a clear redundancy message including a recipient identifier indicating a third peer system; and updating a redundancy list by removing any entries in said redundancy list indicating said third peer system as the recipient identifier of that entry.
 19. The method of claim 18, wherein: said third peer system is said second peer system.
 20. The method of claim 14, wherein: each peer system in said peer-to-peer relay network stores a connection limit defining a number of other peer systems up to which that peer system is permitted to connect, and each peer system stores a set of one or more relay rules for relaying data to other peer systems connected to that peer system.
 21. A peer system in a peer-to-peer relay network, comprising: means for receiving a first message including first identification information from a first sending peer system connected to said peer system in a peer-to-peer relay network; means for storing said first identification information; means for receiving a second message including second identification information from a second sending peer system connected to said peer system in said peer-to-peer relay network; means for comparing said second identification information with said first identification information; means for building a redundancy update message; and means for sending said redundancy update message to said second sending peer system.
 22. The peer system of claim 21, further comprising: means for building a clear redundancy message; and means for sending said clear redundancy message from said peer system to each peer system connected to said first peer system in said peer-to-peer relay network.
 23. The peer system of claim 21, further comprising: means for sending a message including identification information to a recipient peer system connected to said peer system in a peer-to-peer relay network; means for receiving a redundancy update message from said recipient peer system; and means for updating a redundancy list including one or more entries; wherein each entry in said redundancy list stores a recipient identifier indicating a peer system and a message identifier, such that an entry indicates said peer system is not to send a message to the peer system indicated by the entry when the message includes identification information matching the message identifier indicated by the entry.
 24. The peer system of claim 21, further comprising: means for receiving a clear redundancy message including a recipient identifier indicating a disconnected peer system; and means for updating a redundancy list by removing any entries in said redundancy list indicating said disconnected peer system as the recipient identifier of that entry; wherein each entry in said redundancy list stores a recipient identifier indicating a peer system and a message identifier, such that an entry indicates said peer system is not to send a message to the peer system indicated by the entry when the message includes identification information matching the message identifier indicated by the entry.
 25. The peer system of claim 21, wherein: said peer system stores a connection limit defining a number of other peer systems up to which said peer system is permitted to connect, and said peer system stores a set of one or more relay rules for relaying data to other peer systems connected to said peer system.
 26. A computer program, stored on a tangible storage medium, for use in a peer system in a peer-to-peer relay network, the program comprising executable instructions that cause a computer to: process a received first message including first identification information from a first sending peer system connected to said peer system in a peer-to-peer relay network; store said first identification information; process a received second message including second identification information from a second sending peer system connected to said peer system in said peer-to-peer relay network; compare said second identification information with said first identification information; build a redundancy update message; and send said redundancy update message to said second sending peer system.
 27. The computer program of claim 26, further comprising instructions that cause a computer to: build a clear redundancy message; and send said clear redundancy message from said peer system to each peer system connected to said first peer system in said peer-to-peer relay network.
 28. The computer program of claim 26, further comprising instructions that cause a computer to: send a message including identification information to a recipient peer system connected to said peer system in a peer-to-peer relay network; process a received redundancy update message from said recipient peer system; and update a redundancy list including one or more entries; wherein each entry in said redundancy list stores a recipient identifier indicating a peer system and a message identifier, such that an entry indicates said peer system is not to send a message to the peer system indicated by the entry when the message includes identification information matching the message identifier indicated by the entry.
 29. The computer program of claim 26, further comprising instructions that cause a computer to: process a received clear redundancy message including a recipient identifier indicating a disconnected peer system; and update a redundancy list by removing any entries in said redundancy list indicating said disconnected peer system as the recipient identifier of that entry; wherein each entry in said redundancy list stores a recipient identifier indicating a peer system and a message identifier, such that an entry indicates said peer system is not to send a message to the peer system indicated by the entry when the message includes identification information matching the message identifier indicated by the entry.
 30. The computer program of claim 26, wherein: said peer system stores a connection limit defining a number of other peer systems up to which said peer system is permitted to connect, and said peer system stores a set of one or more relay rules for relaying data to other peer systems connected to said peer system. 